#include <signal.h>
 #include <unistd.h>
  #include <stdlib.h>
 #include <fcntl.h>
void Deamon(bool isroot, bool isclose)
{
    //1、忽略可能引起进程异常退出的信号
    signal(SIGCHLD, SIG_IGN);
    signal(SIGPIPE, SIG_IGN);

    //2、准备设置为新会话，shell创建子进程后，子进程会将自己设置为新进程组，所以子进程是组长，我们要设置进程为新会话，
    //就要先保证自己不是组长进程
    if(fork() >0)
    {
        exit(0);
    }

    setsid();

    //3、判断一下看用不用把守护进程的工作路径给改成根
    if(isroot)
    {
        chdir("/");
    }

    //4、判断一下看用不用把文件描述符关掉不用
    if(isclose)
    {
        close(0);
        close(1);
        close(2);
    }
    else
    {
        int fd= open("/dev/null", O_RDWR);
        dup2(fd, 0);
        dup2(fd, 1);
        dup2(fd, 2);
        close(fd);
    }


}

int main()
{
    Deamon(1, 1);
    while(1)
    {
        sleep(1);
    }
    return 0;
}